package net.seratch.taskun.common;

import net.seratch.taskun.Scheduler;
import net.seratch.taskun.scheduler.config.SchedulerConfig;

/**
 * DI Container (or something like that) adaptor interface
 * 
 * @author Kazuhiro Sera
 */
public interface ComponentContainerAdaptor {

	/**
	 * Get scheduler
	 * 
	 * @return scheduler
	 */
	public Scheduler getScheduler();

	/**
	 * Get scheduler config
	 * 
	 * @return scheduler config
	 */
	public SchedulerConfig getSchedulerConfig();

	/**
	 * get component from component container
	 * 
	 * @param <T>
	 *            type parameter
	 * @param clazz
	 *            class of component
	 * @return component instance
	 */
	public <T> T getComponent(Class<?> clazz);

}
